﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using WpfApplication2.Helpers;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.UserControls;
using System.Globalization;
using WpfApplication2.Validation;
using System.Reflection;
using System.ComponentModel;
using WpfApplication2.Views;
using WpfApplication2.Views.Nomenclador;
namespace WpfApplication2.ViewModels.Nomenclador
{
    class MostrarInfNomenclViewModel : ViewModel
    {

         
         public Service1SoapClient WS;
         public Instancias Instancias { get; set; }
        
        public NomencladorDTO NomenAux
        {
            get
            {
                return nomenAux;
            }
            set
            {
                if (nomenAux != value)
                {
                    nomenAux = value;
                    RaisePropertyChanged("NomenAux");
                }
            }
        }
        private NomencladorDTO nomenAux;
      
        #region properties
        public string CodigoNom
        {
            get
            {
                return codigoNom;
            }
            set
            {
                if (codigoNom != value)
                {
                    codigoNom = value;
                    RaisePropertyChanged("CodigoNom");
                }
            }
        }
        private string codigoNom;
        public string Descrip
        {
            get
            {
                return descrip;
            }
            set
            {
                if (descrip != value)
                {
                    descrip = value;
                    RaisePropertyChanged("Descrip");
                }
            }
        }
        private string descrip;


        public String Prueba
        {
            get
            {
                return prueba;
            }
            set
            {
                if (prueba != value)
                {
                    prueba = value;
                    RaisePropertyChanged("Prueba");
                }
            }
        }
        private String prueba;



        public PropertyElement CodigoNomP
        {
            get
            {
                return codigoNomP;
            }
            set
            {
                if (codigoNomP != value)
                {
                    codigoNomP = value;
                    RaisePropertyChanged("CodigoNomP");
                }
            }
        }
     
        
        
        private PropertyElement codigoNomP;

        public PropertyElement Descripcion
        {
            get
            {
                return descripcion;
            }
            set
            {
                if (descripcion != value)
                {
                    descripcion = value;
                    RaisePropertyChanged("Descripcion");
                }
            }
        }
        private PropertyElement descripcion;
       
        public PropertyElement Letra
        {
            get
            {
                return letra;
            }
            set
            {
                if (letra != value)
                {
                    letra = value;
                    RaisePropertyChanged("Letra");
                }
            }
        }
        private PropertyElement letra;
        public PropertyElement Galeno
        {
            get
            {
                return galeno;
            }
            set
            {
                if (galeno != value)
                {
                    galeno = value;
                    RaisePropertyChanged("Galeno");
                }
            }
        }
        private PropertyElement galeno;
        public PropertyElement Especialista
        {
            get
            {
                return especialista;
            }
            set
            {
                if (especialista != value)
                {
                    especialista = value;
                    RaisePropertyChanged("Especialista");
                }
            }
        }
        private PropertyElement especialista;
        public PropertyElement Ayudante1
        {
            get
            {
                return ayudante1;
            }
            set
            {
                if (ayudante1 != value)
                {
                    ayudante1 = value;
                    RaisePropertyChanged("Ayudante1");
                }
            }
        }
        private PropertyElement ayudante1;
        public PropertyElement Ayudante2
        {
            get
            {
                return ayudante2;
            }
            set
            {
                if (ayudante2 != value)
                {
                    ayudante2 = value;
                    RaisePropertyChanged("Ayudante2");
                }
            }
        }
        private PropertyElement ayudante2;
        public PropertyElement Ayudante3
        {
            get
            {
                return ayudante3;
            }
            set
            {
                if (ayudante3 != value)
                {
                    ayudante3 = value;
                    RaisePropertyChanged("Ayudante3");
                }
            }
        }
        private PropertyElement ayudante3;
        public PropertyElement Anestesista
        {
            get
            {
                return anestesista;
            }
            set
            {
                if (anestesista != value)
                {
                    anestesista = value;
                    RaisePropertyChanged("Anestesista");
                }
            }
        }
        private PropertyElement anestesista;
        public PropertyElement Gastos
        {
            get
            {
                return gastos;
            }
            set
            {
                if (gastos != value)
                {
                    gastos = value;
                    RaisePropertyChanged("Gastos");
                }
            }
        }
        private PropertyElement gastos;
        public PropertyElement CodAnterior
        {
            get
            {
                return codAnterior;
            }
            set
            {
                if (codAnterior != value)
                {
                    codAnterior = value;
                    RaisePropertyChanged("CodAnterior");
                }
            }
        }
        private PropertyElement codAnterior;

        public NomencladorDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private NomencladorDTO[] resultados;

        public NomencladorDTO[] Resultados1
        {
            get
            {
                return resultados1;
            }
            set
            {
                if (resultados1 != value)
                {
                    resultados1 = value;
                    RaisePropertyChanged("Resultados1");
                }
            }
        }
        private NomencladorDTO[] resultados1;

        public NomencladorDTO Nomenclador
        {
            get
            {
                return nomenclador;
            }
            set
            {
                if (nomenclador != value)
                {
                    nomenclador = value;
                    RaisePropertyChanged("Nomenclador");
                }
            }
        }

        private NomencladorDTO nomenclador;

        #region Visible 


        public Visibility   ResultsVisibility
        {
            get
            {
                return resultsVisibility;
            }
            set
            {
                if (resultsVisibility != value)
                {
                    resultsVisibility = value;
                    RaisePropertyChanged("ResultsVisibility");
                }
            }
        }
        private Visibility resultsVisibility;

        public Visibility ResultsVisibility1
        {
            get
            {
                return resultsVisibility1;
            }
            set
            {
                if (resultsVisibility1 != value)
                {
                    resultsVisibility1 = value;
                    RaisePropertyChanged("ResultsVisibility1");
                }
            }
        }
        private Visibility resultsVisibility1;



        public Visibility TitulosVisibility
        {
            get
            {
                return titulosVisibility;
            }
            set
            {
                if (titulosVisibility != value)
                {
                    titulosVisibility = value;
                    RaisePropertyChanged("TitulosVisibility");
                }
            }
        }
        private Visibility titulosVisibility;

        public Visibility TitulosVisibility1
        {
            get
            {
                return titulosVisibility1;
            }
            set
            {
                if (titulosVisibility1 != value)
                {
                    titulosVisibility1 = value;
                    RaisePropertyChanged("TitulosVisibility1");
                }
            }
        }

        private Visibility titulosVisibility1;
        
        public Visibility   PanelDatosVisible
        {
            get
            {
                return panelDatosVisible;
            }
            set
            {
                if (panelDatosVisible != value)
                {
                    panelDatosVisible = value;
                    RaisePropertyChanged("PanelDatosVisible");
                }
            }
        }
        private Visibility panelDatosVisible;
        public Visibility ResultsListVisibility
        {
            get
            {
                return resultsListVisibility;
            }
            set
            {
                if (resultsListVisibility != value)
                {
                    resultsListVisibility = value;
                    RaisePropertyChanged("ResultsListVisibility");
                }
            }
        }
        private Visibility resultsListVisibility;

        public Visibility ResultsListVisibility1
        {
            get
            {
                return resultsListVisibility1;
            }
            set
            {
                if (resultsListVisibility1 != value)
                {
                    resultsListVisibility1 = value;
                    RaisePropertyChanged("ResultsListVisibility1");
                }
            }
        }
        private Visibility resultsListVisibility1;

        public Visibility NoResultsVisibility
        {
            get
            {
                return noResultsVisibility;
            }
            set
            {
                if (noResultsVisibility != value)
                {
                    noResultsVisibility = value;
                    RaisePropertyChanged("NoResultsVisibility");
                }
            }
        }
        private Visibility noResultsVisibility;
        #endregion 


        #endregion

        public MostrarInfNomenclViewModel(Instancias instancias, NomencladorDTO nomenclador)
        {
            WS = new Service1SoapClient();
           Instancias = instancias;
             NomenAux = nomenclador;
            InicializarPropiedades();
       }

        private void InicializarPropiedades()
        {
            //Inicializacion de propiedades:
            CodigoNomP = new PropertyElement() { Foreground = "White", Name = "Apellido", Value = NomenAux.CodigoNom };
            Descripcion = new PropertyElement() { Foreground = "White", Name = "Nombre", Value = NomenAux.Descripcion };
            Galeno = new PropertyElement() { Foreground = "White", Name = "UserName", Value = NomenAux.Galeno };
            Gastos = new PropertyElement() { Foreground = "White", Name = "Rol", Value = NomenAux.Gastos };
            Especialista = new PropertyElement() { Foreground = "White", Name = "Apellido", Value = NomenAux.Especialista };
            Letra = new PropertyElement() { Foreground = "White", Name = "Nombre", Value = NomenAux.Letra};
            Anestesista = new PropertyElement() { Foreground = "White", Name = "UserName", Value = NomenAux.Anestesista};
            Ayudante1 = new PropertyElement() { Foreground = "White", Name = "Rol", Value = NomenAux.Ayudante1 };
            
            
            ValidationList = new List<PropertyElement>();

            CodigoNomP.Validations.Add(ValidationType.Requerido);
            Descripcion.Validations.Add(ValidationType.Requerido);
            Galeno.Validations.Add(ValidationType.Requerido);
            Gastos.Validations.Add(ValidationType.Requerido);
            Especialista.Validations.Add(ValidationType.Requerido);
            Letra.Validations.Add(ValidationType.Requerido);
            Anestesista.Validations.Add(ValidationType.Requerido);
            Ayudante1.Validations.Add(ValidationType.Requerido);

            ValidationList.Add(CodigoNomP);
            ValidationList.Add(Descripcion);
            ValidationList.Add(Galeno);
            ValidationList.Add(Gastos);
            ValidationList.Add(Especialista);
            ValidationList.Add(Letra);
            ValidationList.Add(Anestesista);
            ValidationList.Add(Ayudante1);
        }

        private bool CanExecute()
        {
            return true;
        }
        private DelegateCommand editarNomenclador;
        public ICommand EditarNomenclador
        {
            get
            {
                if (editarNomenclador == null)
                {
                    editarNomenclador = new DelegateCommand(Editar, CanExecute);
                }
                return editarNomenclador;
            }
        }

        private void Editar()
        {
            if (NomenAux != null)
            {
                Instancias.FrameContent.Content = new EditarNomenclador(Instancias, NomenAux);
            }
            else
            {

                Instancias.ModalDialog.ShowHandlerDialog("Se produjo un erros, intente nuevamente ");
            }
        }


        private DelegateCommand eliminarNomenclador;
        public ICommand EliminarNomenclador
        {
            get
            {
                if (eliminarNomenclador == null)
                {
                    eliminarNomenclador = new DelegateCommand(Eliminar, CanExecute);
                }
                return eliminarNomenclador;
            }
        }

        private void Eliminar()
        {
            if (NomenAux != null)
            {
                WS.Nomenclador_Eliminar(NomenAux.IdNomenclador);
                Instancias.ModalDialog.ShowHandlerDialog("Se ha eliminado correctamente ");
            }
            else
            {

                Instancias.ModalDialog.ShowHandlerDialog("Se produjo un erros, intente nuevamente ");
            }
        }
    
        }

       
    }
    

